package com.easybeanfit.UUService.commutill;

import android.app.ProgressDialog;
import android.content.Context;

import com.easybenefit.UUService.MyApplication;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;

/**
 * 全局异常抓取
 * Created by Andy on 2016/6/8.
 */
public class UncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
    private ProgressDialog progressDialog;

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        Writer resultWriter = new StringWriter();
        PrintWriter printWriter = new PrintWriter(resultWriter);
        ex.printStackTrace(printWriter);
        StringBuffer sb = new StringBuffer();
        sb.append("是否在主线程中发生异常" + UUExceptionUtill.isInMainThread() + "\n");
        sb.append("是否在主进程中发生异常" + UUExceptionUtill.isMainProcess(MyApplication.mContext) + "\n");
        String errorReport = sb.toString() + resultWriter.toString();
        UULogUtil.e(UncaughtExceptionHandler.class, errorReport);
        //这个地方最好把收集到的错误信息日志 上传至服务器 便于开发者定位修改问题。
        //如果是主进程发生了异常 那还是交给系统自己默认的异常处理来做。让用户感知到，否则用户啥都不知道 体验并不好
        //你当然也可以自己定义特殊的错误提示 比如一些有意思的dialog什么的
        UUToastUtil.showToast(MyApplication.mContext,"很抱歉，程序出现异常即将退出...");
        if (UUExceptionUtill.isMainProcess(MyApplication.mContext)) {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
        } else {
            //如果是子进程发生异常 不要给提示 直接殺掉子進程最好 別讓用戶感知到
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }
}
